package com.estagio.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Estado;
import com.estagio.entity.Pais;
import com.estagio.session.EstadoSession;
import com.estagio.session.PaisSession;

@ManagedBean(name="estadoBean")
@SessionScoped
public class EstadoBean {
	
	//ESTADO
	private Estado estado = new Estado();
	private Estado estadoSave = new Estado();
	private Estado estadoSelecionado;
	private String mensagem;
	private DataModel dataModelEstado;
	
	//PAIS
	private Pais pais = new Pais();
	private Pais paisSelecionado = new Pais();
	private Pais paisEstado = new Pais();
	private DataModel dataModelPais;
	
	
	public EstadoBean() {
		this.estado.setPais(new Pais());
		this.paisEstado = new Pais();
	}


	//GETTERS AND SETTERS

	public Estado getEstadoSave() {
		return estadoSave;
	}

	public void setEstadoSave(Estado estadoSave) {
		this.estadoSave = estadoSave;
	}

	public DataModel getDataModelEstado() {
		return dataModelEstado;
	}

	public void setDataModelEstado(DataModel dataModelEstado) {
		this.dataModelEstado = dataModelEstado;
	}

	public DataModel getDataModelPais() {
		return dataModelPais;
	}

	public void setDataModelPais(DataModel dataModelPais) {
		this.dataModelPais = dataModelPais;
	}

	public Pais getPaisEstado() {
		return paisEstado;
	}

	public void setPaisEstado(Pais paisEstado) {
		this.paisEstado = paisEstado;
	}

	public Pais getPaisSelecionado() {
		return paisSelecionado;
	}

	public void setPaisSelecionado(Pais paisSelecionado) {
		this.paisSelecionado = paisSelecionado;
	}

	public Pais getPais() {
		return pais;
	}

	public void setPais(Pais pais) {
		this.pais = pais;
	}
	
	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public Estado getEstadoSelecionado() {
		return estadoSelecionado;
	}

	public void setEstadoSelecionado(Estado estadoSelecionado) {
		this.estadoSelecionado = estadoSelecionado;
	}
	
	
	//METODOS ESTADO
	public void saveEditEstado() {
		EstadoSession estadoRN = new EstadoSession();
		Estado estado = this.estadoSave;		
		this.mensagem = estadoRN.save(estado);

		FacesMessage faces = new FacesMessage(mensagem);
		System.out.println(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}	

	public void saveEstado() {
		EstadoSession estadoRN = new EstadoSession();
		Estado estado = this.estadoSave;		
		this.mensagem = estadoRN.save(estado);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);	
		RequestContext.getCurrentInstance().update("growlEstado");
	}


	public String deleteEstado() {
		EstadoSession estadoRN = new EstadoSession();		
		Estado estado = this.estadoSave;
		this.mensagem = estadoRN.delete(estado);
		this.estadoSave = new Estado();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarEstado";
	}

	public DataModel findEstado() {
		List<Estado> lista = (List<Estado>) new EstadoSession().find(this.estado);
		System.out.println("array no find estadoBean: " + lista.size());
		this.dataModelEstado = new ListDataModel(lista);
		return this.dataModelEstado;
	}
	
	public void clean() {
		this.estado = new Estado();
	}
	
	//METODOS PAIS (para dialogs)
	public void savePais() {
		PaisSession paisSession = new PaisSession();
		Pais pais = this.pais;		
		this.mensagem = paisSession.save(pais);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}

	public String deletePais() {
		PaisSession paisRN = new PaisSession();		
		Pais pais = this.paisSelecionado;
		this.mensagem = paisRN.delete(pais);
		this.paisSelecionado = new Pais();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarPais";
	}

	public DataModel findPais() {
		RequestContext.getCurrentInstance().update("panelDialogConsultarPais");		
		
		List<Pais> listaPais = new PaisSession().find(this.pais);
		this.dataModelPais = new ListDataModel(listaPais);
		return this.dataModelPais;
	}
	
	public void selectPais() {
		Pais paisAux = (Pais) this.dataModelPais.getRowData();
		
		System.out.println("pais datamodel: " + paisAux.getDescricao());
		
		this.estadoSave.getPais().setIdPais(paisAux.getIdPais()); 
		this.estadoSave.getPais().setDescricao(paisAux.getDescricao());
		
		RequestContext.getCurrentInstance().update("panelManterEstado");
		RequestContext.getCurrentInstance().execute("dialogConsultarPais.hide()");
	}
	
	//INVOCAR TELAS
	public String newEstado() {
		this.estadoSave = new Estado();
		this.estadoSave.setPais(new Pais());
		return "manterEstado";
	}
	
	public String consultarEstado() {
		this.estado = new Estado();
		return "consultarEstado";
	}

	public String editarEstado() {
		this.estadoSave = (Estado) this.dataModelEstado.getRowData();		
		return "editarEstado";
	}
	
	public String excluirEstado() {
		this.estadoSave = (Estado) this.dataModelEstado.getRowData();
		return "excluirEstado";
	}
	
	public void openDialogConsultarPais() {
		RequestContext.getCurrentInstance().update("idDialogConsultarPais");
		RequestContext.getCurrentInstance().execute("dialogConsultarPais.show()");
	}
	
	public void openDialogManterPais() {
		this.pais = new Pais();
		RequestContext.getCurrentInstance().update("idDialogManterPais");
		RequestContext.getCurrentInstance().execute("dialogManterPais.show()");
	}

	
}
